"""
数值格式化工具
统一处理所有数值的格式化，保留两位小数
"""
from decimal import Decimal, ROUND_HALF_UP


def format_decimal(value, decimal_places=2):
    """
    格式化数值，保留指定小数位
    :param value: 数值（可以是int, float, Decimal, str）
    :param decimal_places: 小数位数，默认2位
    :return: Decimal对象
    """
    if value is None:
        return Decimal('0.00')
    
    try:
        decimal_value = Decimal(str(value))
        # 四舍五入到指定小数位
        quantize_str = '0.' + '0' * decimal_places
        return decimal_value.quantize(Decimal(quantize_str), rounding=ROUND_HALF_UP)
    except (ValueError, TypeError):
        return Decimal('0.00')


def format_price(value):
    """
    格式化价格，保留两位小数
    :param value: 价格值
    :return: Decimal对象
    """
    return format_decimal(value, 2)


def format_distance(value):
    """
    格式化距离，保留两位小数
    :param value: 距离值（公里）
    :return: Decimal对象
    """
    return format_decimal(value, 2)


def format_coordinate(value):
    """
    格式化坐标，保留6位小数
    :param value: 坐标值（纬度/经度）
    :return: Decimal对象
    """
    return format_decimal(value, 6)


def format_rating(value):
    """
    格式化评分，保留两位小数
    :param value: 评分值
    :return: Decimal对象
    """
    return format_decimal(value, 2)


def format_percentage(value):
    """
    格式化百分比，保留两位小数
    :param value: 百分比值（0-1之间的小数）
    :return: float值
    """
    if value is None:
        return 0.0
    try:
        return round(float(value) * 100, 2)
    except (ValueError, TypeError):
        return 0.0


